PythonでWebsocketなサーバ
概要
ST2との連携でちょっと必要になったので作ってみる。
libevent と、geventが必要。→ 結局ST2上で動かないので、地味に書き直し!
環境はMac OSX 10.8.2 、Python 2.7
ST2でのPython環境は Python 2.6
用件
ST2への、他プロセスからの入力を行う方式として、WebSocketでのpushを試してみた。
ST2のプラグインとしてWebSocketのサーバを起動し、他のプロセスからの入力を受ける。
WebSocketのクライアントとサーバどっち書こう、と迷って、サーバにした。
他プロセス側でサーバ書くのだるいと思ったので。
使用ライブラリ一覧
libevent
結局使わない!!!
brewから入れると楽。
sudo chown sassembla:wheel /usr/local/lib
と
sudo chown sassembla:wheel /usr/local/include
が必要だった。
Macでこの辺がwheelになってるのなんでだろう。
gevent
結局使わない!!!
libeventに依存しているので、libeventを先に入れておくこと。
Macだとデフォルトでeasy_installが入っているので、入れるのは楽。
sudo easy_install-2.6 gevent-websocket
2.6なのは、ST2のMac版のデフォルトのPythonがv2.6だから。
Macには標準で2.7入ってるんだけどなっ なっ、、
最初、なにも考えずeasy_installしてたら、2.7が入ってて、ST2から呼べずに死んでた。
下記を参考にimport弄る or 2.6を使う、で、2.6を使う事を選択。
http://d.hatena.ne.jp/holiru/20101223/1293118186
ST2のプラグインとして、上で紹介したWS受ける機構をMainThread以外のとこで実行することで、WSのサーバは完成。
、、したと思ったんだけど、
このライブラリをST2から別スレッドで呼ぼうとしたところ、
「multiThreadには対応してねーよksg」と言われてしまうなどしていた。
書く
既存のヤツはだめだ!!
(というかMainThread以外でサーバ動かそうという理屈がそもそもおかしい)
自分で書くことにした。
さまよって、Pythonのみで書かれた力作を発見。
https://github.com/kcuzner/python-websocket-server
いろいろ勉強させてもらいつつ、写経。
単体で動かす事が出来た!! 依存がないぞ素晴らしい。
https://github.com/sassembla/SublimeSocket
ST2で、ErrorとかをPushで受けて、エラー情報や値内容をバッファに表示する
続く